package saee.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import saee.dao.EmpresaDAO;
import saee.modelo.Empresa;

@ManagedBean
@ViewScoped
public class EmpresaBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Empresa empresa = new Empresa();
	private List<Empresa> empresas;

	public void limparEmpresa() {
		this.empresa = new Empresa();
		this.empresas = null;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	@SuppressWarnings("unchecked")
	public List<Empresa> getEmpresas() {
		if (empresas == null) {
			EmpresaDAO dao = new EmpresaDAO();
			this.empresas = dao.listarTodos(Empresa.class);
		}

		return empresas;
	}

	public void setEmpresas(List<Empresa> empresas) {
		this.empresas = empresas;
	}

	public void gravarEmpresa(ActionEvent actionEvent) {
		EmpresaDAO empresaDAO = new EmpresaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			empresaDAO.cadastrar(empresa);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Gravado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao gravar", null);
		}
		limparEmpresa();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void alterarEmpresa(ActionEvent actionEvent) {
		EmpresaDAO empresaDAO = new EmpresaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			empresaDAO.atualizar(empresa);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Alterado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao alterar", null);
		}
		limparEmpresa();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void removerEmpresa() {
		EmpresaDAO empresaDAO = new EmpresaDAO();
		FacesMessage msg = null;
		
		try {
			empresaDAO.excluir(Empresa.class, empresa.getId());
			
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Excluido com sucesso", null);
		} catch (Exception e) {
			e.printStackTrace();
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao excluir", null);
		}
		limparEmpresa();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		
	}

}
